/*File Name		: Point.cpp*/
/*Date			: 30-10-2012 */
/*Maker Name	: Jonathan Ery Pradana / 23512038*/
/*Mendeskripsikan definisi prototipe Class Point*/

#include "Point.h"

/** 4 sekawan **/
Point::Point()
/* Constructor: membuat Point default: x=0; y=0 */
{
	//create an origin
	SetX(0);
	SetY(0);
}

Point::Point(int _x,int _y)
/* Constructor: membuat Point berdasarkan parameter absis dan ordinat */
{
	SetX(_x);
	SetY(_y);
}

Point::Point(string s)
/* Constructor: membuat Point berdasarkan string */
/* Prekondisi: format string sudah valid: "(x,y)" */
{
	MakeFromString(s);
}

Point::Point(const Point& P)
/* Copy constructor */
{
	this->x = P.x;
	this->y = P.y;
}

Point& Point::operator=(const Point& P)
/* Overloading operator = */
{
	this->x = P.x;
	this->y = P.y;
	return *this;
}

Point::~Point()
/* Destructor */
{

}

/** Getter & Setter **/
int Point::GetX()
/* Mengembalikan absis */
{
	return this->x;
}

int Point::GetY()
/* Mengembalikan ordinat */
{
	return this->y;
}

void Point::SetX(int x)
/* Mengeset absis sesuai parameter */
/* I.S. Point sudah terbentuk */
/* F.S. absis sesuai dengan parameter */
{
	this->x = x;
}

void Point::SetY(int y)
/* Mengeset ordinat sesuai parameter */
/* I.S. Point sudah terbentuk */
/* F.S. ordinat sesuai dengan parameter */
{
	this->y = y;
}

void Point::Print()
/* I.S. Point terdefinisi */
/* F.S. Nilai Point ditulis ke layar beserta komponen-komponennya */
/* Proses : Menulis nilai setiap komponen Point ke layar */
{
	cout << ToString();
}

void Point::Read()
/* I.S. Sembarang */
/* F.S. Point terdefinisi */
/* Proses : Membaca komponen Point dari masukan pengguna */
{
	int x,y;
	
	cout << "  Masukkan nilai x: ";
	cin >> x;
	cout << "  Masukkan nilai y: ";
	cin >> y;
	SetX(x);
	SetY(y);
}

string Point::ToString()
/* Mengembalikan Point dalam format "(x,y)" */
{
	string s,s1,s2;
	stringstream ss,ss1;
	ss << GetX();
	ss1 << GetY();
	s1 = ss.str();
	s2 = ss1.str();
	s = "(" + s1 + "," + s2 + ")";
	return s;
}

void Point::MakeFromString(string s)
/* Membentuk Point dari elemen yang bertipe string */
/* I.S. format string sesuai: "(x,y)" */
/* F.S. Point terdefinisi */
{
	string temp,p;
	int x,y;
	
	temp = s;
	int startI = s.find_first_not_of("(");
	int endI = s.find_last_not_of(")");
	temp = temp.substr(startI,(endI-startI+1));
	p = temp;
	int midI = p.find(",");
	p = temp.substr(0,midI);
	stringstream ssx(p);
	ssx >> x;
	p = temp.substr(midI+1,temp.length()-midI+1);
	stringstream ssy(p);
	ssy >> y;
	SetX(x);
	SetY(y);
}
